โ– humdrum codex / sportsball v0.1.0
license AGPL-3.0
2.0 KB raw
id
TASK-004
title
Config & persistence layer
status
๐Ÿ Done
assignee
@humdrum-tiv
created_date
2026-06-16 18:03
updated_date
2026-06-18 01:17
labels
feature
dependencies
priority
high
ordinal
4000

Description

XDG config dir (~/.config/pts/). Persists selected leagues, favorite teams, and active theme. Prereq for league-selection, favorites, and theme-switch tasks.

Acceptance Criteria

Implementation Plan

  1. New package internal/config:
    • Config{Favorites []FavTeam json:favorites; Leagues []string json:leagues,omitempty; Theme string json:theme,omitempty}
    • FavTeam{League, ID, Abbr, Name string}
    • dir(): XDG_CONFIG_HOME or ~/.config, then /pts ; path(): dir/config.json
    • Load() (Config,error): missing file -> zero Config + nil; corrupt JSON -> zero Config + nil (defaults, swallow) [AC#2]
    • Save(Config) error: mkdir -p dir, marshal indent, atomic write (tmp+rename) [AC#1]
  2. Tests (config_test.go, offline, XDG_CONFIG_HOME=t.TempDir): missing->defaults; round-trip Save/Load; corrupt->defaults.

Final Summary

Added internal/config: XDG-based persistence for user prefs.

Tests: config_test.go (offline, XDG_CONFIG_HOME=t.TempDir) covers missing->defaults, Save/Load round-trip, corrupt->defaults.